package co.fitstart.coach.service;

import java.util.Date;
import java.util.List;

import co.fitstart.entity.coach.CoachRestCalendar;
import co.fitstart.entity.coach.CoachRestType;
import co.fitstart.entity.principal.Principal;

/**
 * 
 * @author mohanlan
 *
 */
public interface CoachRestCalendarService {
    
    /**
     * 
     * @param principal
     * @param startDate
     * @return
     */
    public List<CoachRestCalendar> getWeeklyCoachRestCalendar(Principal principal, Date startDate);
    
    /**
     * 
     * @param principal
     * @param startDate
     * @param coachRestType
     * @return
     */
    public List<CoachRestCalendar> getWeeklyCoachRestCalendar(Principal principal, Date startDate, CoachRestType coachRestType);
    
    /**
     * 
     * @param principal
     * @param day
     * @return
     */
    public List<String> getDailyCoachRestCalendar(Principal principal, Date day, CoachRestType coachRestType);
    
    /**
	 * 
	 * @param principal
	 * @param day
	 * @param type
	 * @return
	 */
	public int sumWeeklyCalendar(Principal principal, Date day, CoachRestType coachRestType);

	/**
     * 
     * @param principal
     * @param coachRestType
     * @param day
     * @param arrangeHours
     */
    public void arrange(Principal principal, CoachRestType coachRestType, Date day, List<String> arrangeHours);
    
    /**
     * 
     * @param principal
     * @param coachRestType
     * @param day
     * @param disableHours
     */
    public void cancel(Principal principal, CoachRestType coachRestType, Date day, List<String> disableHours);
    
    /**
     * 
     * @param restLimit
     * @param restSum
     * @param arrangeSum
     */
    public void validateSum(int restLimit, int restSum, int arrangeSum);
    
    /**
     * 
     * @param principal
     * @param thisMonday
     */
    public void copyLastWeek(Principal principal, Date thisMonday);
    
    /**
     * 
     * @param principal
     * @param thisMonday
     */
    public void clearThisWeek(Principal principal, Date thisMonday);
}
